package es.ucm.fdi.isbc.viviendas.representacion;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;

import jcolibri.cbrcore.CBRCase;

import es.ucm.fdi.isbc.viviendas.Recomendador;

public class DatosUsuarios{
	private ArrayList<Usuario> datos;
	
	//private static DatosUsuarios INSTANCE=null;

	public DatosUsuarios()
	{
		datos=new ArrayList<Usuario>();
		leerDeFichero();
	}
	

//	public static DatosUsuarios dameUsuarios()
//	{
//		if(INSTANCE==null)INSTANCE=new DatosUsuarios();
//		return INSTANCE;
//	}
	
	private Usuario dameUsuario(String usuario){
		for (Usuario us:datos){
			if(us.getNombre().equals(usuario))
				return us;
		}
		return null;
	}
	
	public Usuario loginUsuario(String usuario,String pass){
		Usuario us = dameUsuario(usuario);
		if(us!=null && us.getContrasena().equals(pass)){
				return us;
		}
		return null;
	}
	
	public boolean addUsuario(String nombre, String password){
		if(dameUsuario(nombre)==null){
			datos.add(new Usuario(nombre,password));
			return true;
		}
		else
			return false;
	}
	

	public String toString()
	{
		String respuesta="";
		if(this.size()==0)
			return respuesta;
		for(Usuario user:datos)
		{
			respuesta=respuesta+user+",";
		}
		return respuesta;
	}
	
	private int size() {
		return datos.size();
	}

	public boolean guardarEnFichero()
	{
		//datos=users;
		String sFichero = "usuarios.txt";
		File fichero = new File(sFichero);
		if (!fichero.exists())
		{
			try
			{
			fichero.createNewFile();
			}
			catch(Exception e)
			{
				System.out.println("No se puede crear el fichero");
				return false;
			}
		}
		
		try
		{
			BufferedWriter bw = new BufferedWriter(new FileWriter(sFichero));
			
			for(int i=0;i<datos.size();i++)
			{
				bw.write(datos.get(i).toString());
				bw.newLine();
			}
			
			bw.close();
		}
		catch(Exception e)
		{
			System.out.println("No se puede escribir en fichero");
			return false;
		}
		
		return true;
	}
	
	private boolean leerDeFichero()
	{
		
		try 
		{
			FileReader fr = new FileReader ("usuarios.txt");
			//datos=new ArrayList<Usuario>();
			Usuario u=null;
			BufferedReader br = new BufferedReader(fr);
			String linea = br.readLine();
			if(linea==null || linea.equals("")){
				fr.close();
				return false;
			}
			String[] datosUsuario = null;
			String nombre=null;
			String contrasena=null;
			String[] favoritosLeidos=null;
			HashSet<CBRCase> favoritos=null;
			
			while (linea!=null)
			{
				
				datosUsuario = linea.split("@");
				favoritos=new HashSet<CBRCase>();
				nombre=datosUsuario[0];
				contrasena=datosUsuario[1];
				u=new Usuario(nombre,contrasena);
				if(datosUsuario.length>2){
					favoritosLeidos=datosUsuario[2].split(",");
					for(int i=0;i<favoritosLeidos.length;i++)
					{
						favoritos.add(Recomendador.dameControlador().getCaso(new Integer(favoritosLeidos[i])));
					}
					u.setFavoritos(favoritos);
				}
				datos.add(u);
				linea = br.readLine();
			}
			fr.close();
			return true;

		} 
		catch (FileNotFoundException e) {
			System.out.println("No existe el fichero de usuarios");
			return false;
		} 
		catch (IOException e) {
			System.out.println("Error al leer el fichero de usuarios");
			return false;
		}
	}
	

	public ArrayList<Usuario> getDatos()
	{
		return datos;
	}
	
	public HashSet<CBRCase> getFavoritosUsuario(String nombre)
	{
		for(Usuario u:datos)

		{
			if(u.getNombre().equals(nombre))
			{
				return u.getFavoritos();
			}
		}
		return null;
	}
	
	public static void main(String[] args)
	{

	}
}
